import { SelectivePreloadingStrategyService } from './selective-preloading-strategy.service';
import { AuthGuard } from './auth/auth.guard';
import { ComposeMessageComponent } from './compose-message/compose-message.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';

const routes: Routes = [

  // { path:'crisis-center', component:CrisisListComponent},

  // { path:'heroes', component:HeroListComponent},

  // outlet:'popup' 特意指出当前路由用哪个路由出口
  { path:'compose', component:ComposeMessageComponent, outlet:'popup'},

  /**
   * 惰性加载admin模块(在此之前admin的根routing地址要设置为空)
   * 1.过程如下:
   * 其实就是路径在根模块留着一份，然后当用户访问/admin时，根模块才根据路径加载它的孩子模块，
   * 到了admin.module后，会自动根据admin.routing的设置加载对应的component
   * 2.既然孩子module的路径已经指明了，那么app.module中就不需要引入对应的module了
   *  */
  { path:'admin',
    // 对于app.module来说是加载children
    loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule),
    canLoad:[AuthGuard]
  },

  { path:'crisis-center',
    // 对于app.module来说是加载children
    loadChildren: () => import('./crisis-center/crisis-center/crisis-center.module').then(m => m.CrisisCenterModule),
    // 在 data 中自定义一个preload属性，自定义当preload属性为true时才预加载----自定义预加载策略
    data: { preload : true}
  },

  // path:''表示默认路由，即localhost:4200，当且仅当地址为这个时才跳转到英雄列表，因此是full，完全匹配
  { path:'', redirectTo:'superheroes', pathMatch:'full'},

  // path:'**'表示前面都匹配不到才跳转的地址，通常放异常页面
  { path:'**', component:PageNotFoundComponent}

];

@NgModule({
  imports: [RouterModule.forRoot(
    routes,
    {
      enableTracing: true,
      // 预加载(即将要加载)策略为 预加载所有惰性路由
      // preloadingStrategy: PreloadAllModules
      // 自定义预加载
      preloadingStrategy: SelectivePreloadingStrategyService

    } // 方便debug
    )],
  exports: [RouterModule]
})
export class AppRoutingModule { }
